package route

import "log"

func NewRouteGroup(pattern string, memo string, mux *Mux) *RouteGroup {
	return &RouteGroup{
		Pattern: pattern,
		Memo:    memo,
		pool:    map[string]string{},
		Array:   []*Route{},
		mux:     mux,
	}
}

type RouteGroup struct {
	Pattern string
	Memo    string
	pool    map[string]string
	Array   []*Route
	mux     *Mux
}

// 添加路由到群组
func (r *RouteGroup) Add(route *Route) {
	// 拼接路由到群组下
	route.Pattern = r.Pattern + route.Pattern
	// 判断路由是否存在
	if memo := r.pool[route.Pattern]; memo != "" {
		log.Panicf("RouteGroup-%s\tAdd操作失败\n路由%s已存在\n原路由功能：%s\n冲突的路由功能：%s", r.Pattern, route.Pattern, memo, route.Memo)
	}
	// 判断mux是否存在，存在直接添加到对应路由
	if r.mux != nil {
		r.mux.AddRoute(route)
	}
	// 添加路由到
	r.Array = append(r.Array, route)
}

// 添加群组到群组
func (r *RouteGroup) AddGroup(group *RouteGroup) {
	// 拼接路由到群组下
	group.Pattern = r.Pattern + group.Pattern
	// 判断路由是否存在
	if memo := r.pool[group.Pattern]; memo != "" {
		log.Panicf("RouteGroup-%s\tAddGroup操作失败\n路由%s已存在\n原路由功能：%s\n冲突的路由功能：%s", r.Pattern, group.Pattern, memo, group.Memo)
	}
	// 遍历添加
	for _, v := range group.Array {
		r.Add(v)
	}
}
